package com.company;
// JMM 可见性
public class C10JMMVisible {
//  private static boolean run=true;
private volatile static boolean run=true;
// volatile:可见性 ，每次读取都从主存中读取; 防止指令重排序
// 一个线程对一个volatile变量的修改，对于另一个线程的可见性
// 不保正原子性操作。
// Synchronized 修饰的语句块既可以保证代码块的原子性，也同时保证代码块变量的可见性。缺点是synchronized是属于重量级的操作，性能相对较低。
    public static void main(String[] args) throws InterruptedException {
        System.out.println("main start!");
        new Thread(new Runnable() {
            @Override
            public void run() {
                while(run){
                    ;
                 System.out.println("loop");
                }

            }
        }).start();
        Thread.sleep(1000);
        run=false;
        System.out.println("main over!");

        //System.exit(0);
    }
}
